package com.ruoyi.hospital.service;

import java.time.LocalDate;
import java.util.Date;
import java.util.List;
import com.ruoyi.hospital.domain.Schedules;
import org.apache.ibatis.annotations.Param;

/**
 * 排班信息Service接口
 *
 * @author xiaozhao
 * @date 2025-07-03
 */
public interface SchedulesService
{
    /**
     * 查询排班信息
     *
     * @param scheduleId 排班信息主键
     * @return 排班信息
     */
    public Schedules selectSchedulesByScheduleId(Long scheduleId);

    /**
     * 查询排班信息列表
     *
     * @param schedules 排班信息
     * @return 排班信息集合
     */
    public List<Schedules> selectSchedulesList(Schedules schedules);

    /**
     * 新增排班信息
     *
     * @param schedules 排班信息
     * @return 结果
     */
    public int insertSchedules(Schedules schedules);

    /**
     * 修改排班信息
     *
     * @param schedules 排班信息
     * @return 结果
     */
    public int updateSchedules(Schedules schedules);

    /**
     * 批量删除排班信息
     *
     * @param scheduleIds 需要删除的排班信息主键集合
     * @return 结果
     */
    public int deleteSchedulesByScheduleIds(Long[] scheduleIds);

    /**
     * 删除排班信息信息
     *
     * @param scheduleId 排班信息主键
     * @return 结果
     */
    public int deleteSchedulesByScheduleId(Long scheduleId);


    /**
     * 更新号源数量
     * @param doctorId 医生ID
     * @param appointmentDate 日期（Date）
     * @param timeSlot 时段（"上午"/"下午"/"夜间"）
     * @param change 变化量（+为增加，-为减少）
     * @return 影响行数
     */
    int updateQuota(Long doctorId, Date appointmentDate, String timeSlot, int change);

    /**
     * 根据科室ID和就诊日期查询该科室医生的值班信息
     * @param deptId 科室ID
     * @param appointmentDate 就诊日期
     * @return 排班信息集合
     */
    List<Schedules> selectSchedulesByDeptIdAndDate(@Param("deptId") Long deptId, @Param("date") Date appointmentDate);
}
